package factory;

/**
 * 抽象工厂
 *
 * 控制产品一族
 * 场景
 * 人    开着【车】 拿着【ak】 吃着【面包】
 * 魔    骑着【扫】 拿着【魔】 吃着【蘑菇】
 *
 * 分析抽象出
 * 1、交通工具   武器   食物
 * 2、抽象出可以创建 交通工具 武器 食物 的一族的工厂
 *
 */

interface Series{
    void sayName();
}

abstract class Vehicle implements Series{
   public abstract void sayName();
}

abstract class Arms implements Series{
    public abstract void sayName();
}

abstract class Food implements Series{
   public abstract void sayName();
}

abstract class GroupFactory{
    abstract Series createVehicle();
    abstract Series createArms();
    abstract Series createFood();
}


// 人
class Cars extends Vehicle{

    @Override
    public void sayName() {
        System.out.println("人开着车");
    }
}

class AK47 extends Arms{

    @Override
    public void sayName() {
        System.out.println("人拿着ak47");
    }
}

class M extends Food{

    @Override
    public void sayName() {
        System.out.println("人吃着面包");
    }
}

class PeopleFactory extends GroupFactory{

    @Override
    Vehicle createVehicle() {
        return new Cars();
    }

    @Override
    Arms createArms() {
        return new AK47();
    }

    @Override
    Food createFood() {
        return new M();
    }
}



public class AbstructFactory {
    public static void main(String[] args) {
        System.out.println("abstructFactory");

        GroupFactory groupFactory = new PeopleFactory();

        groupFactory.createVehicle().sayName();
        groupFactory.createArms().sayName();
        groupFactory.createFood().sayName();
    }
}
